// 知识点1：C++11新标准，派生类可以直接重用基类的构造函数，一个类只能”继承“它的直接基类的构造函数，并且不能继承默认、拷贝、移动构造函数，若派生类中没有这些构造函数，编译器会自动产生合成版本

// 知识点2：在派生类中使用using声明语句
#include <string>
using namespace std;
class B {
public:
  B(const string &s); //构造函数
};
class A : public B {
public:
  using B::B; //继承了基类的构造函数
};

// 知识点3：通常情况下，using只是令某个名字在当前作用域可见，但是当作用于构造函数时，using声明语句将会使编译器产生代码，派生类继承基类的构造函数，其派生的部分成员将会默认初始化

// 知识点4：不管using出现在哪，基类的私有构造函数在派生类中还是一个私有类型的，其访问级别不会被using改变

// 知识点5：当一个基类的构造函数有默认实参时，这些实参不会被继承，派生类会获得多个继承的构造函数，每个构造函数都将省略掉一个含有默认实参的形参
// class bulk_quote : public Quote {
// public:
//   bulk_quote(); //默认构造函数
//   bulk_quote(string &book, double p, size_t n, double disc)
//       : Quote(book, p), min_qty(n), discount(disc){}; //派生类构造函数

//   bulk_quote(const bulk_quote &rhs) : Quote(rhs) {} //继承拷贝构造函数
//   bulk_quote &operator=(const bulk_quote &rhs) {
//     Quote::operator=(rhs); //继承拷贝赋值运算符
//     return *this;
//   }
//   bulk_quote(const bulk_quote &&rhs) : Quote(move(rhs)) {} //继承移动构造函数
//   bulk_quote &operator=(const bulk_quote &&rhs) {
//     Quote::operator=(move(rhs)); //继承拷贝赋值运算符
//     return *this;
//   }
//   // virtual double net_price(size_t) const;//重新声明，与下面的方式作用相同
//   double net_price(size_t cnt)
//       const override
//       //允许派生类显示的注明它将使用哪个成员函数改写基类的虚函数
//   {
//     if (cnt >= min_qty) {
//       return cnt * (1 - discount) * price;
//     } else {
//       return cnt * price;
//     }
//   }
//   void debug() {
//     cout << "This is bulk_quote Class" << endl;
//     cout << "DISCOUNT: " << discount << endl;
//     cout << "Min_qty: " << min_qty << endl;
//     cout << "Price: " << price << endl;
//   }
//   //除了自定义的版本，还可以访问其基类的相应成员
// private:
//   double discount; //折扣额，C++11新标准
//   size_t min_qty;  //适用折扣的最低购买量
// };
